Pipe Operator for JavaScript
2023/3/7現在stage 2
例
これが
code:js
console.log(
chalk.dim(
`$ ${Object.keys(envars)
.map(envar => ${envar}=${envars[envar]})
.join(' ')}`,
'node',
args.join(' ')
)
);
こう書ける
code:js
Object.keys(envars)
.map(envar => ${envar}=${envars[envar]})
.join(' ')
|> $ ${%}
|> chalk.dim(%, 'node', args.join(' '))
|> console.log(%);
Hack Style v.s. F# Styleの議論があった F# styleはstage 2への移行を2回否決された歴史があるので、今はほぼHack styleで確定らしい
Hack Style
code:js
Object.keys(envars)
.map(envar => ${envar}=${envars[envar]})
.join(' ')
|> $ ${%}
|> chalk.dim(%, 'node', args.join(' '))
|> console.log(%);
|>の右側はラムダ式ではなく、topic referenceを含む関数呼び出し
引数の個数に関係なく統一的な書き方をできる
引数が1つのときはF# styleに比べてやや冗長
個人的には言語にtopic referenceを導入しないといけないところが短所に感じるmrsekut.icon
F# Style
code:js
Object.keys(envars)
.map(envar => ${envar}=${envars[envar]})
.join(' ')
|> x=> $ ${x}
|> x=> chalk.dim(x, 'node', args.join(' '))
|> console.log;
|>の右側はラムダ式あるいは単項関数
引数が1つのときはシンプルに書ける
引数が複数あるときは、毎回ラムダ式を使わなければならず冗長
争点は、引数が1つのときと、2つ以上のときの書き方の差異という感じか
一般的に、引数が2つ以上あることの方が多い、というのがHack優勢な理由らしい